package com.winner.template_method_pattern;

// 模板方法模式, 如 JdbcTemplate 等, 打开连接, 关闭连接就是 模板方法中的共性方法
public class TemplateMethodPattern {

    public static void main(String[] args) {
        AbstractClass tm = new ConcreteClass();
        tm.templateMethod();
    }

}

//抽象类
abstract class AbstractClass {
    // 模板方法, 大的流程是如下的
    public void templateMethod() {
        specificMethod();  // 具体的方法, 即模板方法中共性的一些操作
        abstractMethod1(); // 这2个抽象方法, 子类对其重写,
        abstractMethod2();
    }
    //具体方法
    public void specificMethod() {
        System.out.println("抽象类中的具体方法被调用...");
    }
    //抽象方法1
    public abstract void abstractMethod1();
    //抽象方法2
    public abstract void abstractMethod2();
}
//具体子类
class ConcreteClass extends AbstractClass {
    @Override
    public void abstractMethod1() {
        System.out.println("抽象方法1的实现被调用...");
    }
    @Override
    public void abstractMethod2() {
        System.out.println("抽象方法2的实现被调用...");
    }
}
